package com.tgy.admin.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.StpUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author tianguiyin
 * @version 1.0
 * @date 2022/6/16 10:03
 */
@Validated
@Api(value = "后台管理测试控制器", tags = {"后台管理测试"})
@RestController
@RequestMapping("/admin")
public class AdminTestController {


    /**
     *  登陆测试
     */
    @ApiOperation("测试登录")
    // @SaCheckLogin                   //登录认证 —— 只有登录之后才能进入该方法
    // @SaCheckRole("admin")           //角色认证 —— 必须具有指定角色标识才能进入该方法
    // @SaCheckPermission("user:add")  //权限认证 —— 必须具有指定权限才能进入该方法
    @GetMapping("doLogin")
    public String doLogin(String username, String password) {

        String hashpw = BCrypt.hashpw(password);
        boolean checkpw = BCrypt.checkpw(password, hashpw);


        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);
            System.out.println("token："+StpUtil.getTokenValue());
            return "登录成功";
        }
        System.out.println( "当前会话是否登录：" + StpUtil.isLogin());
        return "登录失败";
    }

    // 查询登录状态
    @ApiOperation("查询登录状态")
    @SaCheckLogin
    @GetMapping("isLogin")
    public String isLogin() {
        List<String> roleList = StpUtil.getRoleList();
        List<String> permissionList = StpUtil.getPermissionList();
        String tokenValue = StpUtil.getTokenValue();
        System.out.println(tokenValue);
        return "当前会话是否登录：" + StpUtil.isLogin();
    }

}
